Der folgende Code illustriert die Verarbeitung mehrerer Sätze eines Recordset am Beispiel der Öffnungsprozedur des Formulars FrmStart von Access_Quiz.mdb. Aufgabe von FrmStart ist unter anderem die Initialisierung der Basistabelle SCORESMC (Scores der Multiple Choice-Aufgaben). Deren Attribute sollen die folgenden Startwerte enthalten:
Der Fragenschlüssel wird aus der Aufgabentabelle QuizMehrfachwahl kopiert
Alternativenschlüssel wird (analog zu QuizMehrfachwahl) von 1 bis 4 durchnummeriert
Die Matrikelnummer ist bei Selbstkorrektur -1
Der Testschlüssel ist bei Selbstkorrektur -1
Die Benutzerlösung ist False (was einem leeren Kontrollkästchen entspricht)
Wer eine Basis- oder Ergebnistabelle satzweise verarbeiten will, muss einen Recordset öffnen und ihm den Tabellennamen übergeben. Der folgende Entwurf der Ereignisprozedur Form_Open öffnet einen Recordset der Basistabelle SCORESMC und initialisiert jeden Satz mit den Identifikationsattributen Fragenschlüssel und Alternativenschlüssel. Die Matrikelnummer des Quizteilnehmers wurde bei Testbeginn vom Teilnehmer eingegeben, und der Testschlüssel stammt aus der Tabelle QuizTEST der Aufgabenbank QUIZ_BACKEND.
Bilde aus der leeren Tabelle SCORESMC einen leeren Recordset rstSCORESMC Bilde aus dem Fragenschlüssel und dem Alternativenschlüssel von QuizMEHRFACHWAHL einen zweiten Recordset rstSCORESMCSchlüssel Solange rstSCORESMCSchlüssel nicht fertig Füge einen Satz mit den folgenden Feldern an rstSCORESMC: Fragenschlüssel = Fragenschlüssel von rstSCORESMCSchlüssel Alternativenschlüssel = Alternativenschlüssel von rstSCORESMCSchlüssel Matrikelnummer = Matrikelnummer des Quizteilnehmers Testschlüssel = Testschlüssel Benutzerlösung = False 'später mit Benutzereingabe überschreiben Gehe zum nächsten Satz von rstSCORESMCSchlüssel Schliesse rstSCORESMC und rstSCORESMCSchlüssel
Der folgende VBA-Code ist länger als der Entwurfscode, weil er Entscheidungen enthält, die nichts mit der Programmlogik zu tun haben. Zum Beispiel beeinflussen die folgenden Schlüsselwörter die Sicherheit und Effizienz der Recordset-Verarbeitung: dbOpenForwardOnly erlaubt nur die vorwärtslesende Navigation, während dbOpenDynaset auch das schreibende Durchlaufen ermöglicht.
... '-- Objektvariablen, welche auf die beiden Recordsets zeigen Set rstSCORESMC = .OpenRecordset(_ "SCORESMC", _ dbOpenDynaset) Set rstSCORESMCSchlüssel = .OpenRecordset( _ "SELECT QuizMEHRFACHWAHL.Fragenschlüssel,QuizMEHRFACHWAHL.Alternativenschlüssel " & _ "FROM QuizMEHRFACHWAHL;", _ dbOpenForwardOnly)'-- SCORESMC-Skelett erstellen ' -------------------------- With rstSCORESMC Do While Not rstSCORESMCSchlüssel.EOF '- Satzskelett jeweils an das Ende von SCORESMC fügen .AddNew !Fragenschlüssel = rstSCORESMCSchlüssel!Fragenschlüssel !Alternativenschlüssel = rstSCORESMCSchlüssel!Alternativenschlüssel !Matrikelnummer = Matrikelnummer_des_Pb 'Pb heisst Proband (Teilnehmer) !Testschlüssel = Testschlüssel_des_Pb !Benutzerlösung = False 'später mit Benutzereingabe überschreiben .Update 'Änderungen endgültig speichern rstSCORESMCSchlüssel.MoveNext Loop rstSCORESMCSchlüssel.Close Set rstSCORESMCSchlüssel = Nothing .Close 'Tabelle SCORESMC speichern End With Set rstSCORESMC = Nothing ...
Satzverarbeitung unter DAO
Verarbeitung
eines einzigen Satzes unter DAO